css: Compare icon theme serials
authorMatthias Clasen <mclasen@redhat.com>
Wed, 22 Apr 2020 17:49:18 +0000 (13:49 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 22 Apr 2020 23:22:41 +0000 (19:22 -0400)
When comparing to icon theme image values for equality,
take the serial of the icon theme at compute time into
account.

gtk/gtkcssimageicontheme.c
gtk/gtkcssimageiconthemeprivate.h

index 08fd70a61fbb188e07b9cdda954dbb92c3e6a6ac..03a8a67d52f6b18ff482c589ec9d972b24173bca 100644 (file)
@@ -153,6 +153,7 @@ gtk_css_image_icon_theme_compute (GtkCssImage      *image,
   settings = gtk_style_provider_get_settings (provider);
   display = _gtk_settings_get_display (settings);
   copy->icon_theme = gtk_icon_theme_get_for_display (display);
+  copy->serial = gtk_icon_theme_get_serial (copy->icon_theme);
   copy->scale = gtk_style_provider_get_scale (provider);
   gtk_icon_theme_lookup_symbolic_colors (style, &copy->color, &copy->success, &copy->warning, &copy->error);
 
@@ -166,7 +167,9 @@ gtk_css_image_icon_theme_equal (GtkCssImage *image1,
   GtkCssImageIconTheme *icon_theme1 = (GtkCssImageIconTheme *) image1;
   GtkCssImageIconTheme *icon_theme2 = (GtkCssImageIconTheme *) image2;
 
-  return g_str_equal (icon_theme1->name, icon_theme2->name);
+  return icon_theme1->serial == icon_theme2->serial &&
+         icon_theme1->icon_theme == icon_theme2->icon_theme &&
+         g_str_equal (icon_theme1->name, icon_theme2->name);
 }
 
 static void
index 02fd2046fd198ae68b0a9cbea2c56e27e8e8280f..5b1540d4134eff41c138684275cb9328ad5612d8 100644 (file)
@@ -44,7 +44,8 @@ struct _GtkCssImageIconTheme
   GdkRGBA success;
   GdkRGBA warning;
   GdkRGBA error;
-  gint scale;
+  int serial;
+  int scale;
   char *name;
 
   int cached_size;